package com.jasperframework.boot.common.modules.base.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p> 数据库实体公用类 </p>
 *
 * @author daizhao
 * @site https://miliqkdoc.motopa.cn
 * @date 2022/12/12 12:12
 */
@Getter
@Setter
@EqualsAndHashCode
@ToString
public class BaseEntity<T> implements Serializable {

    /**
     * 指定主键生成策略使用雪花算法（默认策略）
     * <p>
     * AUTO: AUTO自动增长策略，对于像MySQL这样的支持主键自动递增的数据库
     * NONE(1)：如果使用 IdType.NONE 策略，表示未设置主键类型（注解里等于跟随全局，全局里约等于 INPUT）
     * INPUT ：自动生成主键，需要传入参数主键，主键类型为Number或String，如：id = #{id}
     * ASSIGN_UUID(不含中划线的UUID)
     * ASSIGN_ID(雪花算法) 默认
     */
    @TableId(type = IdType.AUTO)
    private T id;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 最后修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime lastModified;

    /**
     * 是否删除，用于逻辑删除  0:未删除 1：已删除
     */
    @TableLogic
    private Boolean remove = false;
}
